package com.yf.dxapp.module.app.service.appnotice;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import com.yf.dxapp.module.app.controller.admin.appnotice.vo.AppNoticePageReqVO;
import com.yf.dxapp.module.app.controller.admin.appnotice.vo.AppNoticeSaveReqVO;
import com.yf.dxapp.module.app.dal.dataobject.appnotice.AppNoticeDO;
import com.yf.dxapp.module.app.dal.mysql.appnotice.AppNoticeMapper;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;

import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static com.yf.dxapp.module.app.enums.ErrorCodeConstants.DATA_NOT_EXISTS;

/**
 * 通知公告 Service 实现类
 *
 * @author 芋道源码
 */
@Service
@Validated
public class AppNoticeServiceImpl implements AppNoticeService {

    @Resource
    private AppNoticeMapper appNoticeMapper;

    @Override
    public Long createAppNotice(AppNoticeSaveReqVO createReqVO) {
        // 插入
        AppNoticeDO appNotice = BeanUtils.toBean(createReqVO, AppNoticeDO.class);
        appNoticeMapper.insert(appNotice);
        // 返回
        return appNotice.getId();
    }

    @Override
    public void updateAppNotice(AppNoticeSaveReqVO updateReqVO) {
        // 校验存在
        validateAppNoticeExists(updateReqVO.getId());
        // 更新
        AppNoticeDO updateObj = BeanUtils.toBean(updateReqVO, AppNoticeDO.class);
        appNoticeMapper.updateById(updateObj);
    }

    @Override
    public void deleteAppNotice(Long id) {
        // 校验存在
        validateAppNoticeExists(id);
        // 删除
        appNoticeMapper.deleteById(id);
    }

    private void validateAppNoticeExists(Long id) {
        if (appNoticeMapper.selectById(id) == null) {
            throw exception(DATA_NOT_EXISTS);
        }
    }

    @Override
    public AppNoticeDO getAppNotice(Long id) {
        return appNoticeMapper.selectById(id);
    }

    @Override
    public PageResult<AppNoticeDO> getAppNoticePage(AppNoticePageReqVO pageReqVO) {
        return appNoticeMapper.selectPage(pageReqVO);
    }

}